// 标题
// 字符串的排列
// 题目描述
// 给定两个字符串 s1 和 s2，写一个函数来判断 s2 是否包含 s1 的某个变位词。
// 换句话说，第一个字符串的排列之一是第二个字符串的子串。
// 示例 1:
// 输入: s1 = "ab" s2 = "eidbaooo"
// 输出: true
// 解释: s2 包含 s1 的排列之一（"ba"）.
// 示例 2:
// 输入: s1 = "ab" s2 = "eidboaoo"
// 输出: false
// 提示:
// 1 <= s1.length, s2.length <= 104
// s1 和 s2 仅包含小写字母

function checkInclusion(s1, s2) {
    const lenS1 = s1.length;
    const lenS2 = s2.length;
    if (lenS1 > lenS2) {
        return false;
    }
    const charCountS1 = new Array(26).fill(0);
    for (let i = 0; i < lenS1; i++) {
        charCountS1[s1.charCodeAt(i) - 'a'.charCodeAt(0)]++;
    }
    for (let i = 0; i <= lenS2 - lenS1; i++) {
        const charCountWindow = new Array(26).fill(0);
        for (let j = 0; j < lenS1; j++) {
            charCountWindow[s2.charCodeAt(i + j) - 'a'.charCodeAt(0)]++;
        }
        let isMatch = true;
        for (let k = 0; k < 26; k++) {
            if (charCountWindow[k]!== charCountS1[k]) {
                isMatch = false;
                break;
            }
        }
        if (isMatch) {
            return true;
        }
    }
    return false;
}

let s1 = "ab";
let s2 = "eidbaooo";
console.log(checkInclusion(s1, s2));
s1 = "ab";
s2 = "eidboaoo";
console.log(checkInclusion(s1, s2));